package org.zjx.task.core;

import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 任务链执行结果
 */
@Data
public class ChainResult {
    private boolean success;
    private String errorMessage;
    private final List<TaskResult> taskResults = new ArrayList<>();
    private final long startTime = System.currentTimeMillis();
    private long endTime ;

    /**
     * 构造成功结果
     */
    public ChainResult() {
        this(true, null);
    }

    /**
     * 构造任务链结果
     * @param success 是否成功
     * @param errorMessage 错误消息
     */
    public ChainResult(boolean success, String errorMessage) {
        this.success = success;
        this.errorMessage = errorMessage;
        this.endTime = System.currentTimeMillis();
    }

    /**
     * 添加任务结果
     * @param result 要添加的任务结果
     */
    public void addTaskResult(TaskResult result) {
        taskResults.add(result);
        endTime = System.currentTimeMillis();
    }

    /**
     * 添加错误信息
     * @param errorMessage 错误消息
     */
    public void addError(String errorMessage) {
        this.errorMessage = errorMessage;
        this.success = false;
        endTime = System.currentTimeMillis();
    }

    /**
     * 获取不可修改的任务结果列表
     * @return 任务结果列表
     */
    public List<TaskResult> getTaskResults() {
        return Collections.unmodifiableList(taskResults);
    }

    /**
     * 获取执行时间（毫秒）
     * @return 执行时间
     */
    public long getExecutionTime() {
        return endTime - startTime;
    }
}